gpt4 book ai didi

java - 安卓ListView报错

转载 作者:行者123 更新时间:2023-12-01 13:12:10 26 4
gpt4 key购买 nike

我有一个用来接收一些信息的方法。我向此方法发送一个字符串(服务器方向)和两个包含用户和密码的字符串,然后我收到一个包含所有信息的 String[]。然后我在 ArrayAdapter 上使用 String[] 值,但是 logcat 上显示错误,我不知道为什么会出现此错误...在预览版本中,我使用自己的值,没有“String[] 值”它工作完美,但现在我不知道为什么它不起作用。

String[] values;

@SuppressLint("InlinedApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE);
setContentView(R.layout.activity_select_environment);

myBundle = getIntent().getExtras();

user = myBundle.getString("user");
password = myBundle.getString("password");

values = request("http://myIp/XXX/post.php?request=1", user, password);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, android.R.id.text1, values);
}

另一种方法是下一个:

    public String[] request(String requesturl, String user, String password)
{
String result[] = new String[100];

try
{
HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost(requesturl);

String results = "";

//Varibles POST
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("user", user));
nameValuePairs.add(new BasicNameValuePair("password", password));

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

//Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
response.getAllHeaders();
response.getEntity();
result[0] = "";
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
results = EntityUtils.toString(response.getEntity());
if(!results.equals("-1"))
{
JSONObject jsonResponse = new JSONObject(results);

JSONArray jsonMainNode = jsonResponse.optJSONArray("edificios");

int lengthJsonArr =jsonMainNode.length();
for(int i = 0; i < lengthJsonArr; i++)
{
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
result[i] = jsonChildNode.optString("nombre");
}
}
}

return result;
}
catch(Exception ex)
{
result[0] = "error";
return result;
}
}

这是错误的日志。

03-31 09:02:22.920: W/dalvikvm(2016): threadid=1: thread exiting with uncaught exception (group=0xb3b0ab90)
03-31 09:02:22.950: E/AndroidRuntime(2016): FATAL EXCEPTION: main
03-31 09:02:22.950: E/AndroidRuntime(2016): Process: com.example.en4dis, PID: 2016
03-31 09:02:22.950: E/AndroidRuntime(2016): java.lang.NullPointerException
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.widget.AbsListView.obtainView(AbsListView.java:2240)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.widget.ListView.onMeasure(ListView.java:1175)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.View.measure(View.java:16458)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.widget.RelativeLayout.measureChild(RelativeLayout.java:689)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:473)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.View.measure(View.java:16458)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.View.measure(View.java:16458)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
03-31 09:02:22.950: E/AndroidRuntime(2016): at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.View.measure(View.java:16458)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-31 09:02:22.950: E/AndroidRuntime(2016): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2289)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.View.measure(View.java:16458)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1914)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1111)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1293)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5582)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.Choreographer.doCallbacks(Choreographer.java:562)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.Choreographer.doFrame(Choreographer.java:532)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.os.Handler.handleCallback(Handler.java:733)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.os.Handler.dispatchMessage(Handler.java:95)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.os.Looper.loop(Looper.java:137)
03-31 09:02:22.950: E/AndroidRuntime(2016): at android.app.ActivityThread.main(ActivityThread.java:4998)
03-31 09:02:22.950: E/AndroidRuntime(2016): at java.lang.reflect.Method.invokeNative(Native Method)
03-31 09:02:22.950: E/AndroidRuntime(2016): at java.lang.reflect.Method.invoke(Method.java:515)
03-31 09:02:22.950: E/AndroidRuntime(2016): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
03-31 09:02:22.950: E/AndroidRuntime(2016): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
03-31 09:02:22.950: E/AndroidRuntime(2016): at dalvik.system.NativeStart.main(Native Method)

最佳答案

我认为您的问题在这里:

String result[] = new String[100]; 

您初始化了一个长度为 100 的数组。现在您只填充了数组的一部分。这意味着在你的内存中你将会有这样的东西

Index:       0       1            98     99
Values: Value1 | Value2| ... | null | null

(编辑:我知道这并不完全准确,因为只存储了引用,但这样更容易理解)

现在,当您将其传递给 ArrayAdapter 时,它将解析每个元素,最后它将尝试使用 null 作为字符串来布局 TextView。显然Android不喜欢这样。

您要做的就是获取一个与您的值的长度完全相同的数组。我建议先使用列表,然后再创建数组。例如(未测试伪代码)

public String[] request(String requesturl, String user, String password){

//init List
List<String> values = new ArrayList<String>();

//add values to List like this
values.add("myString");


//return a array with the correct size at last
return values.toArray(new String[values.size()]);

}

确保对您的错误情况也执行相同的操作。

关于java - 安卓ListView报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22762783/

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