-1

Я новичок в android, я пытаюсь разработать приложение с gridview и listview с помощью json. Через json я отобразил набор изображений в gridview и основываясь на позиции gridview, я показываю результаты на следующей странице, которая является списком. Это мой Sub_Category.java (вторая страница Java-файл)Как исправить этот массив ArrayAdapter требует, чтобы идентификатор ресурса был TextView

package com.javatechig.gridviewexample; 
public class Sub_Categories extends ActionBarActivity { 
private ArrayList<GridItem> SubCatgyData; 
private static final String TAG = Sub_Categories.class.getSimpleName(); 
public String TAG1 = "Value for ID"; 
public String TAG2 = "Value for subCategory"; 
public String TAG4 = "Value for subCategory in main method"; 
public String TAG3 = "DONE"; 
public String categoryID; 
private ProgressBar mProgressBar; 
private ListView listView; 
public String subURL = "http://www.prateektechnosoft.com/justcall/cities/gridsubcategories/chennai/"; 
public String URLwithID; 
private ListAdapter mListAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_sub__categories); 
    categoryID = getIntent().getStringExtra("ID"); 
    Log.e(TAG1, categoryID); 
    SubCatgyData = new ArrayList<>(); 
    URLwithID = subURL + categoryID; 

    mProgressBar = (ProgressBar) findViewById(R.id.progressBar2); 
    Log.e(TAG3, "Before Execute"); 
    new AsyncHttpTask().execute(URLwithID); 
    Log.d(TAG4, String.valueOf(SubCatgyData.size())); 
    Log.e(TAG3, "After Execute"); 
    mProgressBar.setVisibility(View.VISIBLE); 


    listView=(ListView) findViewById(R.id.listView2); 


    ArrayAdapter adapter = new ArrayAdapter(Sub_Categories.this,android.R.layout.simple_list_item_2,SubCatgyData); 
    listView.setAdapter(adapter); 


} 

public class AsyncHttpTask extends AsyncTask<String, Void, Integer> { 

    @Override 
    protected Integer doInBackground(String... params) { 
     Integer result = 0; 
     try { 
      // Create Apache HttpClient 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpResponse httpResponse = httpclient.execute(new HttpGet(params[0])); 
      int statusCode = httpResponse.getStatusLine().getStatusCode(); 

      // 200 represents HTTP OK 
      if (statusCode == 200) { 
       String response = streamToString(httpResponse.getEntity().getContent()); 
       parseResult(response); 
       result = 1; // Successful 
      } else { 
       result = 0; //"Failed 
      } 
     } catch (Exception e) { 
      Log.d(TAG, e.getLocalizedMessage()); 
     } 
     runOnUiThread(new Runnable() { 
      public void run() { 
       listView = (ListView) findViewById(R.id.listView2); 


       ArrayAdapter adapter = new ArrayAdapter(Sub_Categories.this, android.R.layout.list_content, SubCatgyData); 
       listView.setAdapter(adapter); 

      } 
     }); 

     Log.e(TAG3, "Done in do background methid"); 
     return result; 
    } 

      @Override 
    protected void onPostExecute(Integer result) { 
     // Download complete. Lets update UI 

     if (result == 0) { 

      Toast.makeText(Sub_Categories.this, "Failed to fetch data!", Toast.LENGTH_SHORT).show(); 
     } 


     //Hide progressbar 
     mProgressBar.setVisibility(View.GONE); 
     Log.e(TAG3, "Done in onPostExecute methid"); 
    } 

    } 
    String streamToString(InputStream stream) throws IOException { 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream)); 
     String line; 
     String result = ""; 
     while ((line = bufferedReader.readLine()) != null) { 
      result += line; 
     } 

     // Close stream 
     if (null != stream) { 
      stream.close(); 
     } 
     Log.e(TAG3, "Done in streamTOString methid"); 
     return result; 
    } 

    private void parseResult(String result) { 
     try { 
      //JSONObject response = new JSONObject(result); 
      JSONArray posts = new JSONArray(result); 
      GridItem item; 
      for (int i = 0; i < posts.length(); i++) { 
       JSONObject post = posts.optJSONObject(i); 
       String catid = post.optString("suB_CATEGORYNAME"); 
       item = new GridItem(); 
       item.setID(catid); 
       SubCatgyData.add(item); 
      } 


      Log.d(TAG2, String.valueOf(SubCatgyData.size())); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     Log.e(TAG3, "Done in parseResult methid"); 
     return; 
    } 
} 

Это мой файл макета.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.javatechig.gridviewexample.Sub_Categories"> 

<ListView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/listView2" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 
<ProgressBar 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/progressBar2" 
    android:layout_centerInParent="true" 
    android:visibility="gone"/> 

</RelativeLayout> 

Это мой журнал. Я не могу исправить эту ошибку. Пожалуйста, помогите мне.

12-15 11:44:33.528 25575-25575/com.javatechig.gridviewexample E/ArrayAdapter: You must supply a resource ID for a TextView 
12-15 11:44:33.528 25575-25575/com.javatechig.gridviewexample D/AndroidRuntime: Shutting down VM 
12-15 11:44:33.529 25575-25575/com.javatechig.gridviewexample E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: com.javatechig.gridviewexample, PID: 25575 
                      java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView 
                       at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:393) 
                       at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369) 
                       at android.widget.AbsListView.obtainView(AbsListView.java:2346) 
                       at android.widget.ListView.measureHeightOfChildren(ListView.java:1280) 
                       at android.widget.ListView.onMeasure(ListView.java:1188) 
                       at android.view.View.measure(View.java:18788) 
                       at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715) 
                       at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) 
                       at android.view.View.measure(View.java:18788) 
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                       at android.view.View.measure(View.java:18788) 
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                       at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453) 
                       at android.view.View.measure(View.java:18788) 
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                       at android.view.View.measure(View.java:18788) 
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 
                       at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 
                       at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 
                       at android.view.View.measure(View.java:18788) 
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 
                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
                       at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) 
                       at android.view.View.measure(View.java:18788) 
                       at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) 
                       at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216) 
                       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) 
                       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
                       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 
                       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
                       at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
                       at android.view.Choreographer.doFrame(Choreographer.java:606) 
                       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:5417) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                      Caused by: java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to android.widget.TextView 
                       at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386) 
                       at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369)  
                       at android.widget.AbsListView.obtainView(AbsListView.java:2346)  
                       at android.widget.ListView.measureHeightOfChildren(ListView.java:1280)  
                       at android.widget.ListView.onMeasure(ListView.java:1188)  
                       at android.view.View.measure(View.java:18788)  
                       at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)  
                       at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)  
                       at android.view.View.measure(View.java:18788)  
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)  
                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)  
                       at android.view.View.measure(View.java:18788)  
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)  
                       at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453)  
                       at android.view.View.measure(View.java:18788)  
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)  
                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)  
                       at android.view.View.measure(View.java:18788)  
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)  
                       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)  
                       at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)  
                       at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)  
                       at android.view.View.measure(View.java:18788)  
                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)  
                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)  
                       at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)  
                       at android.view.View.measure(View.java:18788)  
                       at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)  
                       at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)  
                       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)  
                       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)  
                       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)  
                       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)  
                       at android.view.Choreographer.doCallbacks(Choreographer.java:670)  
                       at android.view.Choreographer.doFrame(Choreographer.java:606)  
                       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)  
                       at android.os.Handler.handleCallback(Handler.java:739)  
                       at android.os.Handler.dispatchMessage(Handler.java:95)  
                       at android.os.Looper.loop(Looper.java:148)  
                       at android.app.ActivityThread.main(ActivityThread.java:5417)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

Заранее спасибо

+0

Попробуйте очистить и построить свой проект снова – Sree

+0

попробовать этот ArrayAdapter адаптер = новый ArrayAdapter (Sub_Categories.this, android.R.layout.list_content, android.R.id.text1, SubCatgyData); вместо ArrayAdapter adapter = new ArrayAdapter (Sub_Categories.this, android.R.layout.list_content, SubCatgyData) –

ответ

1

Поскольку вы используете ListView по умолчанию и ArrayAdapter, и у вас есть только один список данных, т.е. SubCatgyData, вы должны использовать android.R.layout.simple_list_item_1 вместо android.R.layout.simple_list_item_2.

Различия между ними: android.R.layout.simple_list_item_1 имеет только один TextView внутри него, в то время как android.R.layout.simple_list_item_2 имеет два TextView.

ArrayAdapter adapter = new ArrayAdapter(Sub_Categories.this,android.R.layout.simple_list_item_1,SubCatgyData); 
+0

спасибо ... теперь работаю нормально –

+0

Если мой ответ решает ваш запрос, можете ли вы пометить этот ответ как правильный. –

0

Вам необходимо переопределить [ArrayAdapter.getView (INT, вид, ViewGroup)] (http://developer.android.com/reference/android/widget/ArrayAdapter.html#getView(int, android.view.View, android.view.ViewGroup)). См http://developer.android.com/reference/android/widget/ArrayAdapter.html

Чтобы использовать что-то другое, чем TextViews для отображения массива, например, ImageViews, или иметь некоторые данные, кроме ToString() Результаты заполнения мнения, Override GetView (интермедиат, вид, ViewGroup) вернуться тип вида, который вы хотите.

0

Создайте свой собственный макет для адаптера. Вы используете один, предоставленный андроидом. См. Префикс андроида, который вы используете для своего макета.

Смежные вопросы