2016-04-28 7 views
-1

Ich weiß, das mag wie eine wiederholte Frage klingen, aber ich habe alle Lösungen versucht nichts funktioniert.Es zeigt den Fehler "Kann Konstruktor ArrayAdapter nicht auflösen" Ich habe Listview in Mainactivity, die ich bestanden habe zur zweiten Aktivität, wo ich eine Remote-Datenbank suche und Ergebnisse in Listview anzeigen. Nehmen Sie einen look..Thank Sie .. das ist mainactivity:Kann Konstruktor ArrayAdapter in OnPostExecute in AsyncTask nicht lösen

public class Main2Activity extends AppCompatActivity 
implements NavigationView.OnNavigationItemSelectedListener { 
private EditText location; 
private TextView result ; 
ListView lv; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    location = (EditText)findViewById(R.id.editText1); 
    result = (TextView)findViewById(R.id.textView4); 
    lv = (ListView) findViewById(R.id.lv); 
} 
public void search(View view){ 
    String slocation = location.getText().toString(); 
    new SearchActivity(this,lv,1).execute(slocation); 
} 

SearchActivity

public class SearchActivity extends AsyncTask<String,Void,String[]>{ 
private Context context; 
private int byGetOrPost = 0; 
private TextView sresult; 
ListView lv1; 
JSONArray garages; 
String[] names; 

public SearchActivity(Context context,ListView lv1,int flag) { 
    this.context = context; 
    byGetOrPost = flag; 
    this.lv1 = lv1; 
} 

protected void onPreExecute(){ 

} 

@Override 
protected String[] doInBackground(String... arg0) { 
     try{ 
      String location = (String)arg0[0]; 

      String link="http://garagekhojo.in/androidtest.php"; 
      String data = URLEncoder.encode("location", "UTF-8") + "=" + URLEncoder.encode(location, "UTF-8"); 

      URL url = new URL(link); 
      URLConnection conn = url.openConnection(); 

      conn.setDoOutput(true); 
      OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 

      wr.write(data); 
      wr.flush(); 

      BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

      StringBuilder sb = new StringBuilder(); 
      String line = null; 

      // Read Server Response 
      while((line = reader.readLine()) != null) 
      { 
       sb.append(line); 
       break; 
      } 

      String newsb = sb.toString(); 
      JSONObject jo = new JSONObject(newsb) ; 
      garages = jo.getJSONArray("garages"); 
      for (int i = 0; i < garages.length(); i++) { 
       JSONObject c = garages.getJSONObject(i); 

       names[i] = c.getString("name"); 
      } 
      return names; 


     } 
     catch(Exception e){ 
      return null; 
     } 

} 

@Override 
protected void onPostExecute(String[] names){ 
    ArrayAdapter<String> adapter; 
    adapter = new ArrayAdapter<String>(this, R.layout.class,names); 
    lv1.setAdapter(adapter); 
} 

}

+0

versuchen Sie dies, es wird Ihnen helfen, Kontext anstelle von diesem zu verwenden. Adapter = neuer ArrayAdapter (Kontext, R.layout.class, Namen); – Nowshad

+0

posten Sie bitte auch Ihren ArrayAdapter-Klassencode. – Nowshad

+0

@Nowshad ArrayAdapter ist eine vordefinierte Klasse in Android. –

Antwort

1

Sie haben Ihre SearchActivity.java zu bearbeiten. Vorname es als SearchAsyncTask. Sie haben das Array name [] string nicht initialisiert, weshalb Sie keine Nullzeigerausnahme haben. Hier

ist der Code von SearchAsyncTask.java

public class SearchAsyncTask extends AsyncTask<String,Void,String[]>{ 
private Context context; 
private int byGetOrPost = 0; 
private TextView sresult; 
ListView lv1; 
JSONArray garages; 

public SearchActivity(Context context,ListView lv1,int flag) { 
    this.context = context; 
    byGetOrPost = flag; 
    this.lv1 = lv1; 
} 

protected void onPreExecute(){ 

} 

@Override 
protected String[] doInBackground(String... arg0) { 
    try{ 
     String location = (String)arg0[0]; 

     String link="http://garagekhojo.in/androidtest.php"; 
     String data = URLEncoder.encode("location", "UTF-8") + "=" + URLEncoder.encode(location, "UTF-8"); 

     URL url = new URL(link); 
     URLConnection conn = url.openConnection(); 

     conn.setDoOutput(true); 
     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 

     wr.write(data); 
     wr.flush(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

     StringBuilder sb = new StringBuilder(); 
     String line = null; 

     // Read Server Response 
     while((line = reader.readLine()) != null) 
     { 
      sb.append(line); 
      break; 
     } 

     String newsb = sb.toString(); 
     JSONObject jo = new JSONObject(newsb) ; 
     garages = jo.getJSONArray("garages"); 
     String[] names = new String[garages.length()]; 
     for (int i = 0; i < garages.length(); i++) { 
      JSONObject c = garages.getJSONObject(i); 
      names[i] = c.getString("name"); 
     } 
     return names; 
    } 
    catch(Exception e){ 
     return null; 
    } 
} 

@Override 
protected void onPostExecute(String[] names){ 
    if(names!=null){ 
     ArrayAdapter<String> adapter; 
     adapter = new ArrayAdapter<String>(context, R.layout.class,names); 
     lv1.setAdapter(adapter); 
    } 
} 

Sie NULL-Prüfung zu, wie im Fall der Ausnahme gelten sollten Sie zurückgeben null als Wert. Wenn also eine Ausnahme auftritt, wird sie abstürzen. Außerdem müssen Sie keine globalen Variablen String [] - Namen definieren, da Sie diese Variable nicht verwenden. Ich habe auch die Klasse und den Namen der Klasse bearbeitet. Bitte prüfe.

+0

Vielen Dank Herr! Ich schätze deine Bemühungen und beende meine Dummheit. –

+0

Keine Sorge. Glückliche Kodierung –

0

Geben Sie bitte den Kontext der Tätigkeit der Asynchron-Aufgabe und verwenden anstelle von Diese

adapter = new ArrayAdapter<String>(context, R.layout.class,names); 

wo der Kontext vonist

und nie verwenden Tätigkeit als Suffix für AsyncTask (schlechte Praxis) (statt SearchActivity SearchAsyncTask verwenden)

+0

Erlaubt mir zu bauen aber "funktioniert leider nicht mehr" beim laufen. –

+0

logcat ist hier ... http: //pastebin.com/8Gxy8Hkd –