- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序在我的 Samsung Galaxy S7 7.0 版 API 24 中运行正常。但是当我在华为 CAM-L03 6.0 版 API 23 中尝试它时它不起作用。
基本上我有这样一个类:
public class Sender extends AsyncTask {...}
具有onPreExecute、doInBackground 和onPostExecute 方法,用于使用互联网与php 文件进行通信。当我在 Samsung Galaxy S7 上运行它并执行 Toast.makeText 时,以每种方法在屏幕上显示文本时,它工作得非常好。但是当我在华为 CAM-L03 上运行它时,只显示来自 onPreExecute 和 onPostExecute 的文本,但从未进入 doInBackground,我不知道为什么。
调用类我这样做:
Sender s = new Sender(MainActivity.this, URL_Total);
s.execute();
不知道是版本问题,还是SDK问题,还是其他问题。感谢您的帮助。
这是我的build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.example.pruebainsp"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
implementation 'com.android.support:design:26.1.0'
implementation files('libs/PhotoUtil.jar')
implementation files('libs/GenAsync.1.2.jar')
}
编辑 1: toast 消息并不是真正的问题..我只是为 View 添加它们,只是为了检查方法。真正的麻烦是 DoInBackground 不运行或做任何事情。
这是 Sender 类的代码。对于三星 Galaxy S7,它会进入 if (MainActivity.ResponseWeb != null),但在华为 CAM-L03 中,ResponseWeb 始终为空,因此每次我收到消息 Toast。 makeText(c, "Error: response "+ MainActivity.ResponseWeb , Toast.LENGTH_SHORT).show();,永远不要为连接做private String send(),因为doInBackground 在这里不起作用(仅在华为手机中)。
GO TO EDIT 2
编辑 2:我用日志更新了代码,所以这里是:
public class Sender extends AsyncTask<Void,Void,String> {
Context c;
String urlAddress;
ProgressDialog pd;
String fileTodosUsers = "TodosUsuarios";
private static final String TAG = Sender.class.getSimpleName();
/*
1.OUR CONSTRUCTOR
2.RECEIVE CONTEXT,URL ADDRESS AND EDITTEXTS FROM OUR MAINACTIVITY
*/
public Sender(Context c, String urlAddress) {
this.c = c;
this.urlAddress = urlAddress;
//Log.v(TAG, "Mensaje 2");
}
/*
1.SHOW PROGRESS DIALOG WHILE DOWNLOADING DATA
*/
@Override
protected void onPreExecute() {
Log.i(TAG, "OnPre");
super.onPreExecute();
pd=new ProgressDialog(c);
pd.setTitle("En Proceso");
pd.setMessage("Procesando datos...Espere por favor");
pd.show();
}
/*
1.WHERE WE SEND DATA TO NETWORK
2.RETURNS FOR US A STRING
*/
@Override
protected String doInBackground(Void... params) {
Log.i(TAG, "doInBack");
return this.send();
}
/*
1. CALLED WHEN JOB IS OVER
2. WE DISMISS OUR PD
3.RECEIVE A STRING FROM DOINBACKGROUND
*/
@Override
protected void onPostExecute(String response) {
Log.i(TAG, "onPost");
super.onPostExecute(response);
MainActivity.ResponseWeb = response;
if (MainActivity.ResponseWeb != null) {
//...
//HERE CODE DO SOME STUFF
//...
}
else {
Toast.makeText(c, "Error: response " + MainActivity.ResponseWeb , Toast.LENGTH_SHORT).show();
}
pd.dismiss();
}
/*
SEND DATA OVER THE NETWORK
RECEIVE AND RETURN A RESPONSE
*/
private String send()
{
Log.i(TAG, "On Send 1");
//CONNECT
HttpURLConnection con=Connector.connect(urlAddress);
Log.i(TAG, "On Send 2");
if(con==null)
{
Log.i(TAG, "On Send 3");
return null;
}
try
{
Log.i(TAG, "On Send 4");
OutputStream os=con.getOutputStream();
Log.i(TAG, "On Send 5");
//WRITE
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));
Log.i(TAG, "On Send 6");
bw.flush();
Log.i(TAG, "On Send 7");
//RELEASE RES
bw.close();
Log.i(TAG, "On Send 8");
os.close();
Log.i(TAG, "On Send 9");
//HAS IT BEEN SUCCESSFUL?
int responseCode=con.getResponseCode();
Log.i(TAG, "On Send 10");
Log.i(TAG, "responseCode = " + responseCode);
if(responseCode==con.HTTP_OK)
{
Log.i(TAG, "On Send 11");
//GET EXACT RESPONSE
BufferedReader br=new BufferedReader(new InputStreamReader(con.getInputStream()));
Log.i(TAG, "On Send 12");
StringBuffer response=new StringBuffer();
Log.i(TAG, "On Send 13");
String line;
Log.i(TAG, "On Send 14");
//READ LINE BY LINE
while ((line=br.readLine()) != null)
{
Log.i(TAG, "On Send 15");
response.append(line);
}
//RELEASE RES
Log.i(TAG, "On Send 16");
br.close();
Log.i(TAG, "On Send 17");
return response.toString();
}else
{
Log.i(TAG, "On Send 18");
}
} catch (IOException e) {
Log.i(TAG, "On Send 19");
e.printStackTrace();
}
Log.i(TAG, "On Send 20");
return null;
}
这是 logcat:
04-04 15:34:01.402 20341-20341/com.example.pruebainsp I/Sender: OnPre
04-04 15:34:01.445 20341-20550/com.example.pruebainsp I/Sender: doInBack
04-04 15:34:01.445 20341-20550/com.example.pruebainsp I/Sender: On Send 1
04-04 15:34:01.445 20341-20550/com.example.pruebainsp I/Sender: On Send 2
04-04 15:34:01.446 20341-20550/com.example.pruebainsp I/Sender: On Send 4
04-04 15:34:01.561 20341-20550/com.example.pruebainsp I/Sender: On Send 5
04-04 15:34:01.562 20341-20550/com.example.pruebainsp I/Sender: On Send 6
04-04 15:34:01.562 20341-20550/com.example.pruebainsp I/Sender: On Send 7
04-04 15:34:01.562 20341-20550/com.example.pruebainsp I/Sender: On Send 8
04-04 15:34:01.562 20341-20550/com.example.pruebainsp I/Sender: On Send 9
04-04 15:34:01.700 20341-20550/com.example.pruebainsp I/Sender: On Send 10
04-04 15:53:57.934 27226-27436/com.example.pruebainsp I/Sender: responseCode = 403
04-04 15:34:01.700 20341-20550/com.example.pruebainsp I/Sender: On Send 18
04-04 15:34:01.700 20341-20550/com.example.pruebainsp I/Sender: On Send 20
04-04 15:34:02.214 20341-20341/com.example.pruebainsp I/Sender: onPost
最佳答案
doInBackground()
顾名思义在后台线程中执行任务。理想情况下,您不能在后台线程上执行 UI 相关操作。一些三星设备倾向于允许这样做,这很奇怪。在某些手机上,它会直接导致您的应用崩溃。
为了使其适用于所有设备,您可以:
@Override
protected Object doInBackground(Object[] objects) {
activityObj.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(contet, "Hello", Toast.LENGTH_LONG).show();
}
});
return null;
}
或
@Override
protected Object doInBackground(Object[] objects) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_LONG).show();
}
});
}
关于java - Android AsyncTask doInBackground 适用于 1 部手机,但不适用于其他手机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49653420/
我在我的 Xcode 项目目录中输入了以下内容: keytool -genkey -v -keystore release.keystore -alias mykey -keyalg RSA \
假设我有一个像这样的 DataFrame(或 Series): Value 0 0.5 1 0.8 2 -0.2 3 None 4 None 5 None
我正在对一个 Pandas 系列进行相对繁重的应用。有什么方法可以返回一些打印反馈,说明每次调用函数时在函数内部进行打印还有多远? 最佳答案 您可以使用跟踪器包装您的函数。以下两个示例,一个基于完成的
我有一个 DataFrame,其中一列包含列表作为单元格内容,如下所示: import pandas as pd df = pd.DataFrame({ 'col_lists': [[1, 2
我想使用 Pandas df.apply 但仅限于某些行 作为一个例子,我想做这样的事情,但我的实际问题有点复杂: import pandas as pd import math z = pd.Dat
我有以下 Pandas 数据框 id dist ds 0 0 0 0 5 1 0 0 7 2 0 0
这发生在我尝试使用 Gradle 构建时。由于字符串是对象,因此似乎没有理由发生此错误: No signature of method: java.util.HashMap.getOrDefault(
您好,有人可以解释为什么在 remaining() 函数中的 Backbone 示例应用程序 ( http://backbonejs.org/examples/todos/index.html ) 中
我有两个域类:用户 class User { String username String password String email Date dateCreated
问题陈述: 一个 pandas dataframe 列系列,same_group 需要根据两个现有列 row 和 col 的值从 bool 值创建。如果两个值在字典 memberships 中具有相似
apporable 报告以下错误: error: unknown type name 'MKMapItem'; did you mean 'MKMapView'? MKMapItem* destina
我有一个带有地址列的大型 DataFrame: data addr 0 0.617964 IN,Krishnagiri,635115 1 0.635428 IN,Chennai
我有一个列表list,里面有这样的项目 ElementA: Number=1, Version=1 ElementB: Number=1, Version=2 ElementC: Number=1,
我正在编译我的源代码,它只是在没有运行应用程序的情况下终止。这是我得到的日志: Build/android-armeabi-debug/com.app4u.portaldorugby/PortalDo
我正在尝试根据另一个单元格的值更改单元格值(颜色“红色”或“绿色”)。我运行以下命令: df.loc[0, 'Colour'] = df.loc[0, 'Count'].apply(lambda x:
我想弄清楚如何使用 StateT结合两个 State基于对我的 Scalaz state monad examples 的评论的状态转换器回答。 看来我已经很接近了,但是在尝试申请 sequence
如果我已经为它绑定(bind)了集合,我该如何添加 RibbonLibrary 默认的快速访问项容器。当我从 UI 添加快速访问工具项时,它会抛出 Operation is not valid whi
在我学习期间Typoclassopedia我遇到了这个证明,但我不确定我的证明是否正确。问题是: One might imagine a variant of the interchange law
我是一名优秀的程序员,十分优秀!