小编Nit*_*ish的帖子

Volley的响应处理

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)

问题在于解析数据.当请求成功onResponseResponseListener,我只需获取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)

android json android-volley

8
推荐指数
1
解决办法
2万
查看次数

Android:从微调器中选择的项目更新回收器视图所需的建议

我是回收者视图的新手.我的要求如下: - 我必须调用一个将提供两个数组的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)

android android-recyclerview

8
推荐指数
1
解决办法
740
查看次数

Android:InflateException:二进制XML文件行:错误输出类<unknown>

我在这个问题上经历了几个帖子,但没有任何帮助.问题仅出现在大屏幕设备上.下面是堆栈跟踪.

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)

xml android android-layout

7
推荐指数
1
解决办法
2万
查看次数

带有Coundown计时器的ListView.滚动列表视图时,计时器闪烁

在我的应用程序中,我必须显示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)

android baseadapter countdowntimer

7
推荐指数
1
解决办法
689
查看次数

Android:更改listview中特定项目的图像

屏幕截图

在上面的图像中,有一个列表视图,其中包含用户可以下载的项目列表. 下载按钮这是告诉用户他可以下载文件的图像.下载完成后,图像将变为下载完成按钮.我的问题是当我下载文件时,状态图像(表示下载已完成)被更改为另一行,相反,它应该更改为我选择的行.目前,如果我在列表中下载第一个文件,则图像会在列表中的第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 android-listview baseadapter

6
推荐指数
1
解决办法
7650
查看次数

Android:下载管理器恢复问题

我正在尝试使用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用于监控网络更改.

android android-download-manager

6
推荐指数
0
解决办法
772
查看次数

HttpUrlConnection Get方法返回状态代码405

我正在尝试使用服务器从服务器获取数据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)

java get httpurlconnection

5
推荐指数
2
解决办法
8095
查看次数

Android:如何为 Android 应用程序使用 GCP 服务帐户

我在我的应用程序中使用 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 密钥。

android android-security

5
推荐指数
1
解决办法
1791
查看次数

Android:应用内结算问题

我正在我的应用程序中集成应用程序内结算.但是,我在测试我的应用时遇到了问题.每次,我都尝试购买应用内商品.出现有线消息无法找到您尝试购买的商品.在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)

android in-app-billing

4
推荐指数
1
解决办法
3129
查看次数

Android MP 图表在图例和轴之间设置空间

我在我的项目中使用 MP 图表。我正在使用多个数据集条形图。我面临以下问题:

  1. 我想在图例和 x 轴之间提供一些空间。现在它与轴粘在一起。我检查了文档,但没有找到任何设置轴和图例之间边距的方法。(附加屏幕截图 - 突出显示为问题 1)
  2. 图表在开头显示一个空组,我想将其删除。(附截图 - 突出显示为问题 2)

在此处输入图片说明

下面是我的代码:

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)

android

4
推荐指数
2
解决办法
1831
查看次数