gpt4 book ai didi

java - 如何从 JSON 对象的结果填充 ListView?

转载 作者:行者123 更新时间:2023-12-02 04:25:20 25 4
gpt4 key购买 nike

我正在使用 Google 搜索实现来搜索用户单击按钮时输入的结果。

我监听该按钮的点击并获取/解析 JSON 结果。

我已经解析了 JSON 的“标题”和“url”,并希望将其填充到 ListView 中。

但是,我认为我没有正确使用 ArrayAdapter 类。

MyActivity.java:

私有(private)ListView listViewGoogle;

private String[] resultArray;

private EditText searchBox;

private Button searchBtn;

private String search_url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";

private String search_query;

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

listViewGoogle = (ListView)findViewById(R.id.listviewgoogle);

searchBox = (EditText)findViewById(R.id.searchBox);
searchBtn = (Button)findViewById(R.id.searchBtn);

searchBtn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
new JsonSearchTask().execute();

try
{
search_query = search_url + searchBox.getText().toString();

new JsonSearchTask().execute();

ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listviewgoogle, resultArray);
listViewGoogle.setAdapter(adapter);

}
catch (Exception e)
{
// TODO: handle exception
}
}
});
}

private class JsonSearchTask extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... arg0)
{
try
{
parseResult(sendQuery(search_query));
}
catch (JSONException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

return null;
}
}

private String sendQuery(String query) throws IOException
{
String queryResult = "";

URL searchURL = new URL(query);

HttpURLConnection httpURLConnection = (HttpURLConnection) searchURL.openConnection();

if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK)
{
InputStreamReader inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream());
BufferedReader bufferedReader = new BufferedReader(inputStreamReader, 8192);

String line = null;

while ((line = bufferedReader.readLine()) != null)
{
queryResult += line;
}

bufferedReader.close();
}

return queryResult;
}

private void parseResult(String json) throws JSONException
{
String parsedResult = "";

JSONObject jsonObject = new JSONObject(json);

JSONObject jsonObject_responseData = jsonObject.getJSONObject("responseData");

JSONArray jsonArray_results = jsonObject_responseData.getJSONArray("results");

resultArray = new String[jsonArray_results.length()];

for(int i = 0; i < jsonArray_results.length(); i++)
{
JSONObject jsonObject_i = jsonArray_results.getJSONObject(i);
parsedResult = "title: " + jsonObject_i.getString("title") + "\n";
parsedResult += "url: " + jsonObject_i.getString("url") + "\n";
//parsedResult += "\n";
resultArray[i] = parsedResult;
}
}

activity_listviewgoogle.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip"
android:textSize="16dip"
android:textStyle="bold"
android:gravity="center" >
</TextView>

activity_my.xml:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:id="@+id/parentOuter" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<EditText
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:hint="type to search..."
android:layout_weight="2"
android:id="@+id/searchBox" />

<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Search Me!"
android:layout_weight="2"
android:id="@+id/searchBtn" />

<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listviewgoogle"
android:layout_weight="1" />

</LinearLayout>

</LinearLayout>

我似乎收到此错误:

Error:(71, 44) error: no suitable constructor found for ArrayAdapter(,int,String[]) constructor ArrayAdapter.ArrayAdapter(Context,int,int) is not applicable (argument mismatch; cannot be converted to Context) constructor ArrayAdapter.ArrayAdapter(Context,int,String[]) is not applicable (argument mismatch; cannot be converted to Context) constructor ArrayAdapter.ArrayAdapter(Context,int,List) is not applicable (argument mismatch; cannot be converted to Context)

有没有办法使用 ArrayAdapter 用数据填充 ListView,或者还有其他方法吗?

抱歉,我是 Android 新手。

最佳答案

你做错了。您已调用 AsyncTsk 并设置适配器,如下所示:

new JsonSearchTask().execute();
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listviewgoogle, resultArray);
listViewGoogle.setAdapter(adapter);

JsonSearchTask 在单独的线程中运行,而 listViewGoogle.setAdapter(adapter); 在获取 JsonSearchTask 结果之前在主线程中调用。所以你必须在JsonSearchTaskonPostExecute()方法中调用这个方法。

错误:

Error:(71, 44) error: no suitable constructor found for ArrayAdapter(,int,String[]) constructor ArrayAdapter.ArrayAdapter(Context,int,int) is not applicable (argument mismatch; cannot be converted to Context) constructor ArrayAdapter.ArrayAdapter(Context,int,String[]) is not applicable (argument mismatch; cannot be converted to Context) constructor ArrayAdapter.ArrayAdapter(Context,int,List) is not applicable (argument mismatch; cannot be converted to Context)

您这样调用:

ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listviewgoogle, resultArray);

在你的 setOnClickListener 中。所以当时 this 引用 OnClickListener 的上下文引用,而不是您的 Activity 的引用。

所以尝试一下

ArrayAdapter adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.activity_listviewgoogle, resultArray);

而不是

ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.activity_listviewgoogle, resultArray);

希望对您有帮助!

关于java - 如何从 JSON 对象的结果填充 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32262645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com