- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用 Java 制作的功能完备的聊天客户端。现在我期待在我的安卓设备上实现同样的功能。我开始在我的项目中导入 ASmack 库,并在每个阶段进行检查以避免错误。不过,我还停留在第一步。我的 Activity 无法在 ASmack Jar 中找到该类,因此我认为我无法继续。
我的简单代码:
package com.test.mypro;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class TestProjectActivity extends Activity {
private static final String LOG_TAG = "TESTER";
/** Called when the activity is first created. */
TextView tvHello;
XMPPConnection connection;
ConnectionConfiguration config;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvHello = (TextView) findViewById(R.id.tvHello);
Log.i(LOG_TAG, "I'm here");
config = new ConnectionConfiguration("prc.p1.im", 5222, "prc.p1.im");
connection = new XMPPConnection(config);
try {
connection.connect();
// tvHello.setText("Connected to XMPP server");
Log.i(LOG_TAG, "Successfully Connected");
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e(LOG_TAG, "Not Connected");
}
}
}
LogCat 日志:
12-22 15:58:16.319: E/dalvikvm(828): Could not find class 'org.jivesoftware.smack.ConnectionConfiguration', referenced from method com.test.mypro.TestProjectActivity.onCreate
12-22 15:58:16.339: W/dalvikvm(828): VFY: unable to resolve new-instance 26 (Lorg/jivesoftware/smack/ConnectionConfiguration;) in Lcom/test/mypro/TestProjectActivity;
12-22 15:58:16.339: D/dalvikvm(828): VFY: replacing opcode 0x22 at 0x0019
12-22 15:58:16.351: D/dalvikvm(828): VFY: dead code 0x001b-0047 in Lcom/test/mypro/TestProjectActivity;.onCreate (Landroid/os/Bundle;)V
12-22 15:58:16.509: I/TESTER(828): I'm here
12-22 15:58:16.519: D/AndroidRuntime(828): Shutting down VM
12-22 15:58:16.519: W/dalvikvm(828): threadid=1: thread exiting with uncaught exception (group=0x40015560)
12-22 15:58:16.561: E/AndroidRuntime(828): FATAL EXCEPTION: main
12-22 15:58:16.561: E/AndroidRuntime(828): java.lang.NoClassDefFoundError: org.jivesoftware.smack.ConnectionConfiguration
12-22 15:58:16.561: E/AndroidRuntime(828): at com.test.mypro.TestProjectActivity.onCreate(TestProjectActivity.java:24)
12-22 15:58:16.561: E/AndroidRuntime(828): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-22 15:58:16.561: E/AndroidRuntime(828): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
12-22 15:58:16.561: E/AndroidRuntime(828): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
12-22 15:58:16.561: E/AndroidRuntime(828): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-22 15:58:16.561: E/AndroidRuntime(828): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-22 15:58:16.561: E/AndroidRuntime(828): at android.os.Handler.dispatchMessage(Handler.java:99)
12-22 15:58:16.561: E/AndroidRuntime(828): at android.os.Looper.loop(Looper.java:123)
12-22 15:58:16.561: E/AndroidRuntime(828): at android.app.ActivityThread.main(ActivityThread.java:3683)
12-22 15:58:16.561: E/AndroidRuntime(828): at java.lang.reflect.Method.invokeNative(Native Method)
12-22 15:58:16.561: E/AndroidRuntime(828): at java.lang.reflect.Method.invoke(Method.java:507)
12-22 15:58:16.561: E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-22 15:58:16.561: E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-22 15:58:16.561: E/AndroidRuntime(828): at dalvik.system.NativeStart.main(Native Method)
附加信息:我导入了 asmack-android-7.jar 库。我的 AVD 正在运行 2.3.3 Android。
我假设因此我遇到了致命异常。我在这里错过了什么?您的帮助将不胜感激。谢谢。
最佳答案
public class ChatScreen extends Activity implements android.view.View.OnClickListener {
private final static String SERVER_HOST = "192.168.88.158";
private final static int SERVER_PORT = 5222;
private final static String SERVICE_NAME = "192.168.88.158";
private final static String LOGIN = "manish";
private final static String PASSWORD = "android";
private List<String> m_discussionThread;
private ArrayAdapter<String> m_discussionThreadAdapter;
private XMPPConnection m_connection;
private Handler m_handler;
public static ArrayList<HashMap<String, String>> usersList;
Presence presence;
ListView list;
int position = 0;
private Button BackBtn;
private Button EndChatBtn;
TextView opretor;
String opretorName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.chat_screen);
usersList=new ArrayList<HashMap<String, String>>();
Intent intent = getIntent();
opretorName = intent.getStringExtra("opName");
opretor = (TextView) findViewById(R.id.Opretor1);
opretor.setText(opretorName);
m_handler = new Handler();
try {
initConnection();
} catch (XMPPException e) {
e.printStackTrace();
}
final EditText recipient = (EditText) this.findViewById(R.id.recipient);
recipient.setText(opretorName + "@manishsys-pc");
final EditText message = (EditText) this.findViewById(R.id.message);
list = (ListView) this.findViewById(R.id.thread);
m_discussionThread = new ArrayList<String>();
m_discussionThreadAdapter = new ArrayAdapter<String>(this,
R.layout.multi_line_list_item, m_discussionThread);
list.setAdapter(m_discussionThreadAdapter);
Button send = (Button) this.findViewById(R.id.send);
send.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SimpleDateFormat")
public void onClick(View view) {
String to = recipient.getText().toString();
String text = message.getText().toString();
Message msg = new Message(to, Message.Type.chat);
Calendar c = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy MMMM d, hh:mm a");
String strdt= formatter.format(c.getTime());
msg.setBody(text);
m_connection.sendPacket(msg);
m_discussionThread.add("me :" + strdt);
m_discussionThread.add(text);
m_discussionThreadAdapter.notifyDataSetChanged();
}
});
BackBtn = (Button) findViewById(R.id.ChatBackBtn);
BackBtn.setOnClickListener(this);
EndChatBtn= (Button) findViewById(R.id.EndChatBtn);
EndChatBtn.setOnClickListener(this);
}
private void initConnection() throws XMPPException {
//Initialisation de la connexion
ConnectionConfiguration config =
new ConnectionConfiguration(SERVER_HOST, SERVER_PORT, SERVICE_NAME );
m_connection = new XMPPConnection(config);
m_connection.connect();
m_connection.login(LOGIN, PASSWORD);
presence = new Presence(Presence.Type.available);
m_connection.sendPacket(presence);
//Get all userList
Roster roster = m_connection.getRoster();
String[] urlArray = new String[] { "office" };
roster.createEntry("ravi", "ravi", urlArray);
Collection<RosterEntry> entries = roster.getEntries();
for(RosterEntry entry : entries) {
HashMap<String, String> map = new HashMap<String, String>();
presence = roster.getPresence(entry.getUser());
Presence.Type type = presence.getType();
map.put("USER", entry.getName().toString());
map.put("STATUS", type.toString());
Log.e("USER", entry.getName().toString());
usersList.add(map);
}
// Assume we've created a Connection name "connection".
ChatManager chatmanager = m_connection.getChatManager();
Chat newChat = chatmanager.createChat("mansih@manishsys-pc ", new MessageListener() {
public void processMessage(Chat chat, Message message) {
System.out.println("Received message: " + message);
}
});
try {
newChat.sendMessage("Howdy!");
}
catch (XMPPException e) {
System.out.println("Error Delivering block");
}
//enregistrement de l'écouteur de messages
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
m_connection.addPacketListener(new PacketListener() {
@SuppressLint("SimpleDateFormat")
public void processPacket(Packet packet) {
Message message = (Message) packet;
if (message.getBody() != null) {
String fromName = StringUtils.parseBareAddress(message
.getFrom());
Calendar c = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy MMMM d, hh:mm a");
String strdt= formatter.format(c.getTime());
m_discussionThread.add(fromName + ":" + strdt);
m_discussionThread.add(message.getBody());
m_handler.post(new Runnable() {
public void run() {
list.smoothScrollToPosition(list.getCount()-1);
m_discussionThreadAdapter.notifyDataSetChanged();
}
});
}
}
}, filter);
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.ChatBackBtn:
Intent BackIntent = new Intent(ChatScreen.this,
OperatorScreen.class);
BackIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(BackIntent);
ChatScreen.this.finish();
break;
case R.id.EndChatBtn:
Intent EndChtIntent = new Intent(ChatScreen.this,
RatingScreen.class);
EndChtIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(EndChtIntent);
ChatScreen.this.finish();
break;
default:
break;`
}
}
}
这是我的代码,对我来说效果很好,希望对您有所帮助。谢谢
关于android - 无法在 Android 中将 XMPP 服务器与 ASmack 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14002092/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!