2017-08-26 18 views
0

これは私のコードです。サーバーからデータを取得してリストビューに表示しようとしています。コンソールウィンドウで「文字列をJSONObjectに変換できません」というエラーが表示されます。だから誰も私にこれに答えることができますようにしてください。文字列をサーバーからアンドロイドでJSONObjectに変換できません

attendence.java

package com.example.pranav.attendence; 

public class attendance 
{ 
     public String name; 
     public void setName(String name) 
     { 
      this.name = name; 
     } 
     public String getName() 
     { 
      return name; 
     } 
} 

AttendanceAdapter.java

package com.example.pranav.attendence; 

import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 
import java.util.ArrayList; 

public class AttendanceAdapter extends BaseAdapter 
{ 
    public final MainActivity mainActivity; 
    public final ArrayList<attendance> studentlist; 
    attendance attendance; 
    public AttendanceAdapter(MainActivity mainActivity, ArrayList<attendance> studentlist) 
    { 
     this.mainActivity = mainActivity; 
     this.studentlist = studentlist; 
    } 
    @Override 
    public int getCount() 
    { 
     return studentlist.size(); 
    } 
    @Override 
    public Object getItem(int i) 
    { 
     return studentlist.get(i); 
    } 
    @Override 
    public long getItemId(int i) 
    { 
     return i; 
    } 
    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) 
    { 
     View row=view; 
     AttendanceAdapter.SubjectHolder holder=null; 
     if(row==null) 
     { 
      LayoutInflater inflater=LayoutInflater.from(mainActivity); 
      row=inflater.inflate(R.layout.list_item,viewGroup,false); 
      holder = new AttendanceAdapter.SubjectHolder(); 
      holder.nametv= (TextView) row.findViewById(R.id.name); 
      row.setTag(holder); 
     } 
     else 
     { 
      holder= (AttendanceAdapter.SubjectHolder) row.getTag(); 
     } 

     attendance stud=studentlist.get(i); 
     holder.nametv.setText(attendance.getName()); 
     return row; 
    } 
    class SubjectHolder 
    { 
     TextView nametv; 
    } 
} 

MainActivity.java

package com.example.pranav.attendence; 

import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.Toast; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity 
{ 
    ListView playerListView; 
    ArrayList<attendance> playerList = new ArrayList<attendance>(); 
    attendance attendance; 
    AttendanceAdapter playerAdapter; 
    ProgressDialog dialog; 
    String TAG=null; 
    String name; 
    String URL="https://pranavpatel428.000webhostapp.com/image/myphp/demo.php"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     playerListView=(ListView)findViewById(R.id.listview); 
     dialog = new ProgressDialog(this); 
     getSubject(); 
     playerListView.setAdapter(playerAdapter); 
     playerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      attendance player=playerList.get(i); 
     } 
    }); 
    } 
    private void getSubject() 
    { 
     dialog.setMessage("Fetching Subject... Please Wait"); 
     dialog.show(); 
     StringRequest stringRequest = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() 
     { 
      @Override 
      public void onResponse(String response) 
      { 
       dialog.dismiss(); 
       try { 
         JSONObject obj = new JSONObject(response); 
         JSONArray jsonArray = obj.getJSONArray("data"); 
         for(int i=0;i<jsonArray.length();i++){ 
          //Declaring a json object corresponding to every pdf object in our json Array 
          JSONObject jsonObject = jsonArray.getJSONObject(i); 
          //Declaring a Pdf object to add it to the ArrayList pdfList 
          name = jsonObject.getString("name"); 
         } 
         attendance = new attendance(); 
         attendance.setName(name); 
         playerList.add(attendance); 
         playerAdapter=new AttendanceAdapter(MainActivity.this,playerList); 
         playerListView.setAdapter(playerAdapter); 
         playerAdapter.notifyDataSetChanged(); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
          Toast.makeText(MainActivity.this, "" + e, Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }, 
       new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
     } 
    }); 
    RequestQueue request = Volley.newRequestQueue(this); 
    request.add(stringRequest); 
    } 
} 

Output 

I am getting this type of error and not getting list coming from server.

+0

StringはJSONObjectに変換できないことは明らかです。したがって、あなたの応答が有効でないか、または解析が間違っています。 – Kunu

+0

あなたのコードをデバッグする人はいません。あなたがこれを解決するために行ったことを示してください。ここに答えたい具体的な質問があります。 – jdv

+0

ちなみに、 'playerList.add(出席);'は、一番最後の名前のために一度だけ呼び出されます –

答えて

0

あなたの応答は有効なjsonではありません。

成功し{ "データ":[{ "名前": "Pranav"}、{ "名前": "Parth"}、{ "名前": "Kaushil"}、{ "名前": "Falak "名前": "Mitesh"}、{"name": "Krishna"}、{"name": "Nilam"}、{"name": "Jui"}、{"name": " "}、{" 名 ":" のKishan "}]、" 成功 ":1、" メッセージ ":" エントリ

あなたは、サーバー側での応答から `成功し」という文字列を削除してください}"が見つかり、それはそれを有効なjsonにします。

JSON文字列の妥当性を確認するには、試してみてください。https://jsonlint.com/

+0

あなたはサーバー側からの応答を変更できない場合。この行の前にあなたのアンドロイドコードで 'successfull'を削除することができます。 'JSONObject obj = new JSONObject(response);' – thinuwan

+0

アンドロイドから 'successfull'を削除するにはどうしたらいいですか? @クヌー –

関連する問題