我Volley在我的项目中用于处理网络请求.这是JSON我的服务器返回的示例
JSON对象响应
{"code":"success", "data":{"some data"}}
Run Code Online (Sandbox Code Playgroud)
JSON数组响应
{"code":"success", "data":["some data"]}
Run Code Online (Sandbox Code Playgroud)
发生某些验证错误或任何其他错误时,服务器返回以下响应:
{"code":"failed", "error":"Access denied"}
Run Code Online (Sandbox Code Playgroud)
问题在于解析数据.当请求成功onResponse时ResponseListener,我只需获取data密钥的内容.在哪里,我期待的结果与我上面发布的相同.我不知道为什么Volley只返回内容data而不是完整内容JSON.我Volley之前也用过.但从未遇到过这类问题.
解析代码:
private void getOnboardingCategories() {
Response.Listener<JSONArray> responseListener = new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(LOG_TAG, "CATEGORY RESPONSE: " + response.toString());
if (response != null) {
int dataLength = response.length();
for (int i = 0; i < dataLength; i++) {
JSONObject jObject = response.optJSONObject(i);
if (jObject …Run Code Online (Sandbox Code Playgroud) 我是回收者视图的新手.我的要求如下: - 我必须调用一个将提供两个数组的Web服务.一个有我需要在列表中显示的数据.为此目的,我正在使用RecyclerView.另一个数组是状态,我在spinner中显示.此Web服务是分页的.我添加了分页,它工作正常. - 当用户从微调器中选择一些其他元素时,我必须再次进行Web服务调用,并且回收器视图数据应该更改.目前,在分页的情况下,一旦我从连续页面获得更多数据,我正在进行跟踪:
mAccountListingsAdapter.notifyItemRangeInserted(mAccountListingsAdapter.getItemCount(), mListings.size() - 1);
Run Code Online (Sandbox Code Playgroud)
而且,当我从微调器更改数据时,我正在做以下事情:
mListings.clear();//Clear the data set
mAccountListingsAdapter.notifyDataSetChanged();//Call notify data set changed on recycler view adapter
getAccountListings();//Fetch new data from the web service and display in recycler view
Run Code Online (Sandbox Code Playgroud)
但是,建议不要直接在recycler视图适配器上调用notifyDataSetChanged(),而应调用特定的notifyXXX方法,以避免性能和动画问题.
所以,我有疑问,如果我正确地通知onItemSelected()微调器中的recycleler视图适配器,或者它应该被更改.
PS我试过以下onItemSelected:
int size = mListings.size();
mListings.clear();
mAccountListingsAdapter.notifyItemRangeRemoved(0, size - 1);
Run Code Online (Sandbox Code Playgroud)
但随后它崩溃了,但有以下例外:
03-02 12:59:41.046: E/AndroidRuntime(4270): java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 4(offset:0).state:5
Run Code Online (Sandbox Code Playgroud) 我在这个问题上经历了几个帖子,但没有任何帮助.问题仅出现在大屏幕设备上.下面是堆栈跟踪.
Logcat输出
03-13 15:21:18.863: E/AndroidRuntime(6334): FATAL EXCEPTION: main
03-13 15:21:18.863: E/AndroidRuntime(6334): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dzo.seattlesnightlife/com.dzo.seattlesnightlife.StoreDescription}: android.view.InflateException: Binary XML file line #29: Error inflating class <unknown>
03-13 15:21:18.863: E/AndroidRuntime(6334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
03-13 15:21:18.863: E/AndroidRuntime(6334): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
03-13 15:21:18.863: E/AndroidRuntime(6334): at android.app.ActivityThread.access$600(ActivityThread.java:130)
03-13 15:21:18.863: E/AndroidRuntime(6334): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
03-13 15:21:18.863: E/AndroidRuntime(6334): at android.os.Handler.dispatchMessage(Handler.java:99)
03-13 15:21:18.863: E/AndroidRuntime(6334): at android.os.Looper.loop(Looper.java:137)
03-13 15:21:18.863: E/AndroidRuntime(6334): at android.app.ActivityThread.main(ActivityThread.java:4745)
03-13 15:21:18.863: E/AndroidRuntime(6334): at java.lang.reflect.Method.invokeNative(Native Method)
03-13 15:21:18.863: E/AndroidRuntime(6334): at java.lang.reflect.Method.invoke(Method.java:511)
03-13 15:21:18.863: E/AndroidRuntime(6334): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-13 15:21:18.863: …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我必须显示listview中每个项目的倒数计时器.我已经能够这样做了CountDownTimer.但是,问题是当向上或向下滚动列表视图时,计时器开始闪烁.搜索了很多,但无法得到解决方案.
我的适配器类
public class BuyListingListAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<VehicleAttributes> mVehicleList = new ArrayList<VehicleAttributes>();
private Date currentDate;
//Saving position in map to check if timer has been //started for this row
private HashMap<Integer, Boolean> timerMap = new HashMap<Integer, Boolean>();
public BuyListingListAdapter(Context context,
ArrayList<VehicleAttributes> vehicleList, boolean showGridView) {
this.mContext = context;
this.mVehicleList = vehicleList;
this.showGridView = showGridView;
currentDate = new Date(System.currentTimeMillis());
int listSize = mVehicleList.size();
for (int i = 0; i < listSize; i++)
timerMap.put(i, false); …Run Code Online (Sandbox Code Playgroud) 
在上面的图像中,有一个列表视图,其中包含用户可以下载的项目列表.
这是告诉用户他可以下载文件的图像.下载完成后,图像将变为
.我的问题是当我下载文件时,状态图像(表示下载已完成)被更改为另一行,相反,它应该更改为我选择的行.目前,如果我在列表中下载第一个文件,则图像会在列表中的第4个或第5个项目中更改.此外,当我尝试从列表中下载任何其他文件时.它打开了最后下载的文件(这是应用程序的功能,如果文件已经下载,然后在pdf阅读器中打开),即,如果我在列表中下载第一个文件,然后去第二个项目,然后而不是下载第二个文件,它打开上次下载的文件.此外,如果我滚动列表视图,下载的状态也会更改为列表中的其他项目.下面是我的适配器代码:
public class DownloadListAdapter extends BaseAdapter {
Context ctx;
public ArrayList<DownloadListDao> mDownloadList;
String readMoreLink;
public static final String TAG = "DownloadListAdapter";
ProgressDialog mProgressDialog;
private boolean isSDCardPresent;
File tieDir;
int downloadState[];
public DownloadListAdapter(Context ctx,
ArrayList<DownloadListDao> mDownloadList) {
this.ctx = ctx;
this.mDownloadList = mDownloadList;
downloadState = new int [mDownloadList.size()];
for(int i = 0; i < mDownloadList.size(); i++) {
downloadState[i] = 0;
}
tieDir = new File(Environment.getExternalStorageDirectory().toString()
+ "/tie");
}// Constructor
public int getCount() {
return this.mDownloadList.size();
}// getCount
public Object …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Android下载管理器下载文件.根据文档:
下载管理器将在后台进行下载,负责HTTP交互并在出现故障或连接更改和系统重新启动后重试下载.
但是,在恢复网络连接后,下载管理器永远不会恢复下载(至少在我的情况下).我甚至尝试使用addRequestHeader()设置请求标头.但没有任何效果.我的代码如下:
Request request = new Request(Uri.parse(BASE_URL));
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI
| DownloadManager.Request.NETWORK_MOBILE);
request.setAllowedOverRoaming(false);
request.setTitle("Aarti Sangrah.zip");
request.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS, "Aarti Sangrah.zip");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
} else {
request.setShowRunningNotification(true);
}
if (isResuming) {
request.addRequestHeader("Range", "bytes="
+ file.length());
}
enqueue = dm.enqueue(request);
Run Code Online (Sandbox Code Playgroud)
在文档中,我找不到任何恢复下载的方法.此外,我有一个BroadcastReceiver用于监控网络更改.
我正在尝试使用服务器从服务器获取数据HttpURLConnection.该请求是一个GET请求.但是,它总是返回状态代码405(BAD_METHOD).以下是我写的方法:
URL url2 = new URL("http://www.example.com/api/client_list?");
HttpURLConnection connection = (HttpURLConnection) url2
.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(NET_READ_TIMEOUT_MILLIS);
connection.setConnectTimeout(CONNECTION_TIMEOUT_MILLIS);
connection.setRequestProperty("Authorization", token);
connection.setDoInput(true);
connection.setDoOutput(true);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("client_id", clientRole));
OutputStream os = connection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
connection.connect();
Run Code Online (Sandbox Code Playgroud)
getQuery()
private String getQuery(List<NameValuePair> params)
throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (NameValuePair pair : params) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(pair.getName(), …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用 Google 路线 API。最近,我收到了来自 Google 的关于 API 密钥的警告说:
Your app contains exposed Google Cloud Platform (GCP) API keys
这是因为方向 API 需要身份验证密钥(我在 strings.xml 文件中有该密钥,并从那里附加它)。在控制台上,已经添加了应用程序的包名称和 SHA1,同时限制了 API。我阅读了有关设置 GCP 服务帐户的信息,但不知道如何使用它。根据文档,我们应该设置环境变量并通过它提供凭据。这是否意味着我必须将生成的 json 文件存储在我的应用程序中并从那里获取凭据(如文档中所述)。如果没有,那么移动应用程序的最佳方法应该是什么。
更新:生成的 google-services.json 本身有 api 密钥。
我正在我的应用程序中集成应用程序内结算.但是,我在测试我的应用时遇到了问题.每次,我都尝试购买应用内商品.出现有线消息无法找到您尝试购买的商品.在Logcat上,出现了以下内容:
09-10 14:45:02.437: E/IabHelper(12617): Launching buy intent for premium. Request code: 10001
09-10 14:45:02.523: E/Finsky(11260): [8464] FileBasedKeyValueStore.delete: Attempt to delete 'paramspXaplU_vTGhfGqvnmPPddQ' failed!
09-10 14:45:04.000: E/Volley(11260): [8448] BasicNetwork.performRequest: Unexpected response code 500 for https://android.clients.google.com/fdfe/preparePurchase
Run Code Online (Sandbox Code Playgroud)
单击"确定"后,logcat显示以下内容:
09-10 14:45:05.546: E/TrivialDrive(12617): onActivityResult(10001,0,Intent { (has extras) }
09-10 14:45:05.546: E/IabHelper(12617): Ending async operation: launchPurchaseFlow
09-10 14:45:05.546: E/IabHelper(12617): Purchase canceled - Response: 2:Unknown
09-10 14:45:05.546: E/TrivialDrive(12617): Purchase finished: IabResult: User canceled. (response: -1005:User cancelled), purchase: null
09-10 14:45:05.546: E/TrivialDrive(12617): **** TrivialDrive Error: Error purchasing: …Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用 MP 图表。我正在使用多个数据集条形图。我面临以下问题:
下面是我的代码:
tco_chart?.description?.isEnabled = false
tco_chart?.setPinchZoom(false)
tco_chart?.setDrawBarShadow(false)
val leftYAxis = tco_chart?.axisLeft
leftYAxis?.setDrawGridLines(false)
leftYAxis?.axisMinimum = 0f
tco_chart?.setDrawGridBackground(false)
val mv = MyMarkerView(this, R.layout.custom_marker_view)
mv.setChartView(tco_chart) // For bounds control
tco_chart.setMarker(mv)
val legend = tco_chart?.legend
legend?.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM)
legend?.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT)
legend?.setOrientation(Legend.LegendOrientation.HORIZONTAL)
legend?.setYOffset(0f)
legend?.setXOffset(10f)
legend?.setYEntrySpace(0f)
legend?.setTextSize(5f)
val axisLabels = ArrayList<String>()
axisLabels.add("Year 1")
axisLabels.add("Year 2")
axisLabels.add("Year 3")
axisLabels.add("Year 4")
axisLabels.add("Year 5")
val xAxis = tco_chart?.xAxis
xAxis?.granularity = 1f
xAxis?.position = XAxis.XAxisPosition.BOTTOM
xAxis?.setCenterAxisLabels(true)
xAxis?.setDrawLabels(true)
xAxis?.valueFormatter = IndexAxisValueFormatter(axisLabels)
val …Run Code Online (Sandbox Code Playgroud)