我正在开发一个应用程序并发出一个http请求,该请求运行良好,
这是我的异步类Doinbackground方法:
@Override
protected String doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url);
Log.d("Response ==>", "Response from url: ");
longInfo(jsonStr);
return jsonStr;
}
这就是我使用的逻辑
public void longInfo(String str) {
if(str.length() > 4000) {
Log.e("TAG", str.substring(0, 4000));
longInfo(str.substring(4000));
} else
Log.e("TAG", str);
}
但这给了我大量的json字符串,它破坏了json格式,我无法相应地解析对象和数组。好心帮忙
这里是我的json解析方法
public void parsejsonp(String jsonp){
if (jsonp != null) {
try {
JSONObject jsonObj = new JSONObject(jsonp);
int count = jsonObj.getInt("count");
Log.e("count=> ",count+"");
int count_total = jsonObj.getInt("count_total");
Log.e("count_total=> ",count_total+"");
int pages = jsonObj.getInt("pages");
Log.e("pages=> ",pages+"");
// Getting JSON Array node
JSONArray Posts = jsonObj.getJSONArray("posts");
// looping through All Posts
for (int i = 0; i < Posts.length(); i++) {
JSONObject c = Posts.getJSONObject(i);
String id = c.getString("id");
String type = c.getString("type");
String slug = c.getString("slug");
String status = c.getString("status");
String title = c.getString("title");
String title_plain = c.getString("title_plain");
String content = c.getString("content");
String date = c.getString("date");
String modified = c.getString("modified");
// Phone node is JSON Object
// JSONObject phone = c.getJSONObject("phone");
// String mobile = phone.getString("mobile");
// String home = phone.getString("home");
// String office = phone.getString("office");
// tmp hash map for single contact
HashMap<String, String> posting = new HashMap<>();
// adding each child node to HashMap key => value
posting.put("id", id);
posting.put("type", type);
posting.put("slug", slug);
posting.put("status",status);
posting.put("title", title);
posting.put("content", content);
posting.put("date", date);
posting.put("modified", modified);
// adding contact to contact list
postList.add(posting);
}
} catch (final JSONException e) {
Log.e("error", "Json parsing error: " + e.getMessage());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getActivity(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG)
.show();
}
});
}
} else {
Log.e("er server", "Couldn't get json from server.");
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getActivity(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});
}
}
这是我的onPost方法:
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.e("RESULT",result);
parsejsonp(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
getActivity(), postList,
R.layout.list_item2, new String[]{"type", "slug","status",
"title","content","date","modified"}, new int[]{R.id.type,
R.id.slug,R.id.state_p,R.id.title_p, R.id.content,R.id.date_p,R.id.moddate_p});
lv.setAdapter(adapter);
}
但是我仍然无法解析所有的数据,因为仍然在结果参数的onPost方法中,我没有完整的响应
我还检查了浏览器上的url,响应完全显示在那里。但是,如果由于缓冲区大小的原因,它没有完全显示在logcat中,那么它必须将所有数据放在我的listview中,但它不是
这是我的listview的屏幕截图
正如您所看到的,只插入了一个对象数据,但未插入响应的其余部分,我已调试了所有代码并检查了arraylist大小,因为它存储了完整数量的对象,但我的屏幕似乎只显示了一个对象数据:
这是我的布局。xml文件可能存在以下问题:
<?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"
tools:context=".fragment">
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<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"
tools:context="com.adnan.zwd.hidoctor.Patient.Frag_two">
<ListView
android:id="@+id/list2"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
</RelativeLayout>
row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/activity_horizontal_margin">
<TextView
android:id="@+id/type"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dip"
android:paddingTop="6dip"
android:text="type"
android:textColor="@color/colorPrimaryDark"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/slug"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="slug"
android:paddingBottom="2dip"
android:textColor="@color/colorAccent" />
<TextView
android:id="@+id/state_p"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="status"
android:paddingBottom="2dip"
android:textColor="@color/colorAccent" />
<TextView
android:id="@+id/title_p"
android:text="title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#5d5d5d"
android:textStyle="bold" />
<TextView
android:id="@+id/content"
android:text="content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#5d5d5d"
android:textStyle="bold" />
<TextView
android:id="@+id/date_p"
android:text="date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#5d5d5d"
android:textStyle="bold" />
<TextView
android:id="@+id/moddate_p"
android:text="Mod Date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#5d5d5d"
android:textStyle="bold" />
</LinearLayout>
关于这个问题的任何帮助,我在网上搜索了很多,但没有成功
最后我发现了问题。这一切的发生都是因为android。支持v4。小装置。我的布局中的嵌套滚动视图
我通过在nestedscrollview中添加android:fillViewport=“true”属性解决了这个问题
如本文所述:
ListView未在NestedScrollView内展开
它为解析提供了一个例外。
什么例外?也许在这里?
new JSONObject(str.substring(4000));
您不能只切割JSONObject的中间部分。第一个{
或[
字符很重要。
您可以使用JsonReader类来解析InputStream,而不是将该流读入BufferedReader,然后读入字符串。
或
您不需要从该方法进行解析。该字符串已在内存中,以便传递到该方法中。
@Override
protected String doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url);
Log.d("Response ==>", "Response from url: ");
longInfo(jsonStr);
return jsonStr; // change your AsyncTask from Void to String return type
}
// standalone method
public static void longInfo(String str) {
if(str.length() > 4000) {
Log.i(TAG, str.substring(0, 4000));
longInfo(str.substring(4000));
} else
Log.i(TAG, str);
}
这是我的layout.xml文件可能问题就在这里
是的,有个问题。
您不应该将ScrollView与ListView一起使用,因为ListView负责自己的垂直滚动
Android | ScrollView
这是所有你需要的碎片布局
<?xml version="1.0" encoding="utf-8"?>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/list2"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
问题内容: 对于为什么我无法使用urllib2从FriendFeed下载一些JSON响应的全部内容,我感到困惑。 如何使用urllib2检索完整响应? 问题答案: 获取所有数据的最佳方法: 原因是考虑到套接字的性质,不能保证返回整个响应。我以为是在文档中讨论过的(也许是),但找不到。
问题内容: 我正在使用JSch连接到SSH并执行命令。其中一个命令给出了很大的输出。在终端中,如果执行命令,则必须按Enter键才能查看整个输出。使用JSch,我无法检索整个输出。 当我使用交互式终端登录时,命令输出在填充屏幕后停止并等待。 该代码取自 如何在String中获取jschshell命令输出: 问题答案: 通常,您不应使用“ shell”通道来自动执行命令。 “外壳”通道旨在实现交互式
APIService: 在活动调用API中:
我正在使用Volley向API发出GET请求: 预期的JSON对象响应很大(可能高达500 KB)。我无法在日志中看到完整的响应。仅显示前50行左右。我还得到了info: BasicNetwork.log慢速请求:请求的HTTP响应= 这意味着请求需要超过3000毫秒。 尝试过的事情: 我已经在手机的开发者选项中将记录器缓冲区大小增加到1M。 原因可能是什么?当它很大的时候,响应是大块发送的吗?如
我试图通过curl与新闻提供网站进行api集成。我能够检索数据,但它不是json格式,所以很难在我的门户网站上显示该数据。 下面是我使用的代码。 请找个人帮忙 curl.php 下面是我得到的结果,如果我回显从上述代码收到的响应 {“状态”:“好的”,“总计结果”: 36,“文章”:[{“来源”:{“id”: null,“名称”:“Tmz.com”},“作者”:“TMZ工作人员”,“标题”:“90