2017-03-30 11 views
-1

私はJavaを使い慣れていませんので、愚かな間違いや間違いをお許しください。 PHPファイルからjsonでエンコードされた文字列を取得して単純なリストビューにするアクティビティがあります。私は恐ろしい赤い波打ち際の線を手に入れています。私には謎めいたエラーメッセージがあります。ここに私のコードです。私は助けていただきありがとうございます。上記のコードでリストビューにJSON配列をアタッチする

package --Hidden--; 

import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.android.volley.AuthFailureError; 
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.HashMap; 
import java.util.Map; 


public class tracklist extends Activity implements OnItemClickListener { 
    private static final String URL = "http://rickthompson.com/json/fetchtracks.php"; 

    ListView lv; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_tracklist); 

     lv = (ListView) findViewById(R.id.displayTrackList); 
     ArrayAdapter<String> adapter = new ArrayAdapter<>(this, 
      R.layout.rowlayout, R.id.label, profileUserOptions); 
     lv.setAdapter(adapter); 
     lv.setOnItemClickListener(this); 

     Bundle bundle = getIntent().getExtras(); 
     final String selectedSubGenre = bundle.getString("option"); 


     ///////////// login script 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     StringRequest request = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       try { 
        JSONObject jsonObject = new JSONObject(response); 
        if (jsonObject.names().get(0).equals("tracks")) { 
         Toast.makeText(getApplicationContext(), "tracks " + jsonObject.getString("tracks"), Toast.LENGTH_LONG).show(); 

         /// save user id in prefs 
         JSONArray contacts = jsonObject.getJSONArray("tracks"); 
         HashMap<String, String> trackview = null; 
         for (int i = 0; i < contacts.length(); i++) { 
          JSONObject c = contacts.getJSONObject(i); 
          String isrc = c.getString("isrc"); 

          trackview = new HashMap<>(); 
          trackview.put("isrc", isrc); 
         } 

         trackview.toString(); 

         lv = (ListView) findViewById(R.id.displayTrackList); 
         ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.rowlayout, R.id.label, trackview); 
         lv.setAdapter(adapter); 
         lv.setOnItemClickListener(this); 
        } else { 
         Toast.makeText(getApplicationContext(), "Error" + jsonObject.getString("error"), Toast.LENGTH_LONG).show(); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
     }) { 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       HashMap<String, String> hashMap = new HashMap<>(); 
       SharedPreferences userPrefs = getSharedPreferences("userInfo", Context.MODE_PRIVATE); 
       String userid = userPrefs.getString("memberid", ""); 

       hashMap.put("u", userid); 
       Bundle bundle = getIntent().getExtras(); 
       final String selectedSubGenre = bundle.getString("option"); 
       hashMap.put("sg", selectedSubGenre); 
       return hashMap; 
      } 
     }; 

     requestQueue.add(request); 
    } 


    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Toast.makeText(getApplicationContext(), "something clicked", Toast.LENGTH_LONG).show(); 
    } 
} 
+2

エラーログを追加できますか? –

+0

コードに問題があります。 jsonオブジェクトのrequestQueueの呼び出しごとにlistviewを作成しています。 'lv =(ListView)findViewById(R.id.displayTrackList);を削除してください。 ArrayAdapter adapter = new ArrayAdapter <>(this、 R.layout.rowlayout、R.id.label、trackview); '。 requestQueueからListviewとアダプタをクラスレベルで宣言します。また、 'lv.setAdapter(adapter)'はrequestQueueの中のnotifyDataSetChanged()メソッドを呼び出します。 –

+0

ご協力ありがとうございます。それは有り難いです。 – user3758065

答えて

0
JSONObject jsonObject = new JSONObject(response); 
if(jsonObject.names().get(0).equals("tracks")){ 
//rest of the code 
} 

私はあなたが私はあなたの詳細な説明を与えることができるように、エラーの詳細を記入してください

JSONArray jso3 = new JSONArray (jsonObject.getString("names")); 

あるべき「名前」配列を取得しようとしている願っています。

+0

ありがとうございました。 – user3758065

関連する問題