1

私はjsonでRssを作成し、バックグラウンドからjsonObjectを取得すると、postExecuteでオブジェクトの結果を使用してマップを作成すると、エラーが発生しますLogCatはSimpleAdapterでエラーWebViewを引き起こします

LogCat

    12-05 17:55:35.597: E/AndroidRuntime(22543): FATAL EXCEPTION: main
    12-05 17:55:35.597: E/AndroidRuntime(22543): java.lang.IllegalStateException: android.webkit.WebView is not a  view that can be bounds by this SimpleAdapter
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.SimpleAdapter.bindView(SimpleAdapter.java:195)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.SimpleAdapter.createViewFromResource(SimpleAdapter.java:126)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.SimpleAdapter.getView(SimpleAdapter.java:114)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.AbsListView.obtainView(AbsListView.java:2161)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.ListView.makeAndAddView(ListView.java:1831)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.ListView.fillDown(ListView.java:674)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.ListView.fillFromTop(ListView.java:735)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.ListView.layoutChildren(ListView.java:1652)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.AbsListView.onLayout(AbsListView.java:1996)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.View.layout(View.java:14003)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.ViewGroup.layout(ViewGroup.java:4375)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.View.layout(View.java:14003)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.ViewGroup.layout(ViewGroup.java:4375)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.View.layout(View.java:14003)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.ViewGroup.layout(ViewGroup.java:4375)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.View.layout(View.java:14003)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.ViewGroup.layout(ViewGroup.java:4375)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.View.layout(View.java:14003)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.ViewGroup.layout(ViewGroup.java:4375)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.Choreographer.doFrame(Choreographer.java:532)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.os.Handler.handleCallback(Handler.java:725)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.os.Handler.dispatchMessage(Handler.java:92)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.os.Looper.loop(Looper.java:137)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at android.app.ActivityThread.main(ActivityThread.java:5238)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at java.lang.reflect.Method.invokeNative(Native Method)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at java.lang.reflect.Method.invoke(Method.java:511)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
    12-05 17:55:35.597: E/AndroidRuntime(22543):    at dalvik.system.NativeStart.main(Native Method)

ソースコード

protected void onPostExecute(JSONObject result) {
      super.onPostExecute(result);
      if(result != null){ 

      JSONObject jsn = result;
      try {
        JSONArray jarray = jsn.getJSONArray("item");
        for (int i = 0; i < jarray.length(); i++){
            JSONObject jsno = jarray.getJSONObject(i);
            Log.d("Log", jsno.getString("title"));
             rssMap = new HashMap<String, Object>();
             rssMap.put(TITLE, jsno.getString("title"));
             rssMap.put(CATEGORY, jsno.getString("category"));
             rssMap.put(DATE, jsno.getString("pubDate"));
             rssMap.put(DESCRIPTION, jsno.getString("description"));// This for webView, it's  html code!
             rssView.add(rssMap);
        }
        SimpleAdapter adapter = new SimpleAdapter(
                getApplicationContext(), rssView, R.layout.item, 
                new String[] {TITLE, CATEGORY, DATE, DESCRIPTION}, 
                new int[] {R.id.title, R.id.cat, R.id.date, R.id.desc}
                );
        list.setAdapter(adapter);
      }
      catch (JSONException e) {     
            e.printStackTrace();}
      }
      else{
          /*
           * Тут мне нужен AlertDialog с оповещанием что нету подключения к сети!
           * */
          showDialog(errorShow);      
      }

    }

}

item.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Заголовок"
        android:textColor="#33b5e5"
        android:textSize="23sp" />

    <TextView
        android:id="@+id/date"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="05.12.2012"
        android:textColor="#969696"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/cat"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Категория"
        android:textColor="#969696"
        android:textSize="14sp" />

    <WebView
        android:id="@+id/desc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>
4

1 に答える 1

3

SimpleAdapter の Android ドキュメントには、次のように記載されています。

ビューへのデータのバインドは、2 つのフェーズで発生します。最初に、SimpleAdapter.ViewBinder が使用可能な場合setViewValue(android.view.View, Object, String)は呼び出されます。戻り値が の場合true、バインディングが発生しています。戻り値が false の場合、次のビューが順番に試行されます。

  • Checkable を実装するビュー (例: CheckBox)。予想されるバインド値はブール値です。
  • TextView. 予想されるバインド値は文字列であり、setViewText(TextView, String)呼び出されます。
  • ImageView. 予想されるバインド値はリソース ID または文字列であり、setViewImage(ImageView, int)またはsetViewImage(ImageView, String)呼び出されます。

適切なバインディングが見つからない場合は、IllegalStateException がスローされます。

アダプターは、独自にjsno.getString("description")(これは) を URL に変換できません。StringString を変換して に URL オブジェクトとして配置することもできますがrssMap、独自のカスタムAdapterおよびオーバーライドメソッドを実装して、バインド中にgetView()の URL を設定することをお勧めします。WebView

于 2012-12-05T14:00:09.103 に答える